<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    /*
    * 面向对象的内涵：是一种思想，编排对象，通过控制实例对象的构造者，达到控制实例出来的对象的目的，实际代码中只需要给对象下达指令就执行了
    *   正式因为不管在构造函数中还是在原型中，所有的this都指向实例对象，
    *   所以在开发过程中，面向对象，面向的就是 构造函数Function中的this 和 原型prototype中的this，
    *   没有必要对每一个对象进行操作，找到他们的构造函数，找到他们的原型，对原型中的this进行操作，就会影响到实例对象
    *
    * 造100个人，使这100个人都有自己设置的功能方法
    *
    * */

    function Person(){ //创建一个专门生成人的构造函数
        this.name = "李四"
        this.age = Math.floor(Math.random() * 10) + 10
        //this.sayName = function (){ //添加一个说名字的功能
        //    console.log(`我是${this.name}`)
        //}
    }

    //如果不在构造函数中添加数名字功能，要怎么实现每个人都能说名字这个功能？直接在Person.prototype添加
    Person.prototype.sayName = function (){
        console.log(`我是${this.name}`) //不管在构造函数中还是在原型中，所有的this都指向实例对象
    }
    Person.prototype.sayAge = function (){
        console.log(`我的年龄是${this.age}岁`) //不管在构造函数中还是在原型中，所有的this都指向实例对象
    }

    let arr = []

    for(let i = 0;i < 100;i++){ //创建一个for循环，循环100次
        arr.push(new Person()) //将每次循环中构造函数实例出来的实例对象添加到arr数组中
    }

    arr[15].sayName() //数组中下标为15的实例对象调用了sayName方法，this就指向arr[15]这个实例对象
    arr[15].sayAge() //数组中下标为15的实例对象调用了sayAge方法，this就指向arr[15]这个实例对象


</script>
</body>
</html>